#pragma once
#include<iostream>
#include"TcpServer.hpp"
#include"Log.hpp"
#include"Protocol.hpp"
#define PORT 8888

class HttpServer
{
    private:
        int port;
        TcpServer *tcp_server;
        bool stop;//记录是否能运行，默认为false
    public:
        HttpServer(int _port=PORT): port(_port),tcp_server(nullptr),stop(false)
        {}
        //初始化
        void InitServer()
        {
            tcp_server = TcpServer::getinstance(port);
        }
        
        //持续运行
        void Loop()
        {
            LOG(INFO,"loop begin");
            int listen_sock = tcp_server->Sock();//获取tcp服务器已经使用的监听套接字
            while(!stop)
            {
                struct sockaddr_in peer;//记录客户端信息结构体
                socklen_t len =sizeof(peer);
                int sock=accept(listen_sock,(struct sockaddr*)&peer,&len);//获取客户端的连接请求
                if(sock<0)
                {
                    continue;//继续等待新连接
                }
                LOG(INFO,"get a new link");
                int *_sock = new int(sock);
                pthread_t tid;
                pthread_create(&tid,nullptr,Entrance::HandlerRequest,_sock);//新线程执行对应的处理函数，并把_sock参数传进去
                pthread_detach(tid);//设置线程分离状态，主线程继续等待，新线程执行完自动释放
            }
        }
};